package top.lishuoboy.dependency.base.jasypt;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;

/**
 * Jasypt加密解密工具
 * <p>
 * 2023-4-8
 *
 * @author lishuoboy
 */
public class MyJasyptUtil {

    public enum AlgorithmEnum {
        PBEWITHHMACSHA512ANDAES_256, // jaspyt-SB-starter默认算法。见JasyptEncryptorConfigurationProperties.java
        PBEWithMD5AndDES
    }


    /**
     * 加密
     *
     * @param message   待加密明文
     * @param password  密码
     * @param algorithm 算法
     * @return 加密后的密文
     */
    public static String encrypt(String message, String password, AlgorithmEnum algorithm) {
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm(algorithm.name());
        config.setPassword(password);
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setConfig(config);
        return encryptor.encrypt(message);
    }

    /**
     * 加密
     * 使用jaspyt-SB-starter默认算法：PBEWITHHMACSHA512ANDAES_256
     *
     * @param message  待加密明文
     * @param password 密码
     * @return 加密后的密文
     */
    public static String encrypt(String message, String password) {
        return encrypt(message, password, AlgorithmEnum.PBEWITHHMACSHA512ANDAES_256);
    }

    /**
     * 解密
     *
     * @param message   待解密密文
     * @param password  密码
     * @param algorithm 算法
     * @return 明解密后的明文
     */
    public static String decrypt(String message, String password, AlgorithmEnum algorithm) {
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setPassword(password);
        config.setAlgorithm(algorithm.name());
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setConfig(config);
        return encryptor.decrypt(message);
    }

    /**
     * 解密
     * 使用jaspyt-SB-starter默认算法：PBEWITHHMACSHA512ANDAES_256
     *
     * @param message  待解密密文
     * @param password 密码
     * @return 明解密后的明文
     */
    public static String decrypt(String message, String password) {
        return decrypt(message, password, AlgorithmEnum.PBEWITHHMACSHA512ANDAES_256);
    }
}
